pandas

您所在的位置:网站首页 python read csv skiprow pandas

pandas

2023-09-22 03:03| 来源: 网络整理| 查看: 265

pandasでcsvファイルを読み込むための関数read_csv()について解説します。

read_csv()は、引数で読み込みの細かい設定が可能です:

区切り文字の指定 indexやlabelの行や列を指定する方法 読み込む行・列の指定

などについて図解付きで解説していきます!

 

基本的な使用方法 read_csv():csvファイルを読み込む sep, delimiter:区切り文字の指定 ヘッダー・インデックスの指定 header:ヘッダー(列名)の行を指定 names:列名を自分で設定 index_col:インデックス列の指定 読み込む行・列の指定 skiprows:読み飛ばす行を指定 skipfooter:下から数行を読み飛ばす usecols:読み込む列を指定 comment:コメント行をスキップ おわりに 基本的な使用方法

read_csv()を使用すると、csvデータからDataFrameを作成できます。

引数で細かい設定をできますが、まずは基本的な読み込み方法を確認してみましょう。

▲目次へ戻る read_csv():csvファイルを読み込む

次のcsvファイルを例に基本的な読み込み操作を解説します。

# a,b,c # 1,20,2 # 2,30,3 # 3,10,1

read_csv()にcsvファイルのパスを与えると、csvからDataFrameを作成します。

import pandas as pd df = pd.read_csv("read_csv_example.csv") print(df) # a b c # 0 1 20 2 # 1 2 30 3 # 2 3 10 1

デフォルトでは、

ヘッダーには、データの一行目が、 インデックスには、自動で連番が

割り当てられます。

これを変更したい場合は、後述するheaderやindex_colを使用します。

▲目次へ戻る sep, delimiter:区切り文字の指定

デフォルトでは、データ間の区切り文字として,(コンマ)が使用されます。

ちなみにですが、そもそもCSVは、Comma-Separated Valuesの略です。

区切り文字を変更したい場合には、sepを明示的に指定します。

次のような/で区切られたデータを考えてみます。

# a/b/c # 1/20/2 # 2/30/3 # 3/10/1

sep = "/"で、区切り文字を/に変更して読み込んでみます。

df = pd.read_csv("read_csv_example_sep.csv", sep="/") print(df) # a b c # 0 1 20 2 # 1 2 30 3 # 2 3 10 1

無事に、データを分割して読み込めました。

delimiterはsepのエイリアス(別名)です。

sepの代わりにdelimiterを使用しても全く同じ結果になります。

df = pd.read_csv("read_csv_example_sep.csv", delimiter="/") print(df) # a b c # 0 1 20 2 # 1 2 30 3 # 2 3 10 1 ▲目次へ戻る ヘッダー・インデックスの指定

デフォルトでは、

ヘッダーには、データの一行目が、 インデックスには、自動で連番が

割り当てられます。

ヘッダー行やインデックス列を指定したい場合は、header、index_colを使用します。

▲目次へ戻る header:ヘッダー(列名)の行を指定

デフォルトでは、データの1行目がヘッダーとして扱われて、label名が設定されます。

headerを明示的に指定する場合:

header = int ⇒ ヘッダー行をintで指定 header = None ⇒ ヘッダー行なし(自動で連番を振る)

を指定することができます。

次のような、ヘッダー行が重複しているデータを例にします。

# Num_A,Num_B,Num_C # a,b,c # 1,20,2 # 2,30,3 # 3,10,1

headerを指定しない場合、2つめのヘッダー行がデータとして認識されてしまいます。

df = pd.read_csv("read_csv_example_header.csv") print(df) # Num_A Num_B Num_C # 0 a b c # 1 1 20 2 # 2 2 30 3 # 3 3 10 1

headerを指定して、1行目をヘッダーに設定してみます。

df = pd.read_csv("read_csv_example_header.csv", header = 1) print(df) # a b c # 0 1 20 2 # 1 2 30 3 # 2 3 10 1

headerで指定した行より上は読み飛ばされる点に注意しましょう。

header=Noneとすると、ヘッダー行はないものとして扱われ、自動で連番が振られます。

df = pd.read_csv("read_csv_example_header.csv", header = None) print(df) # 0 1 2 # 0 Num_A Num_B Num_C # 1 a b c # 2 1 20 2 # 3 2 30 3 # 4 3 10 1 ▲目次へ戻る names:列名を自分で設定

namesにlabel名のリストなどを渡すことで、label名を別途指定できます。

ヘッダー行がない場合には、namesでlabel名を追加するだけでOKです。

# 1,20,2 # 2,30,3 # 3,10,1

label名をnamseで別途指定してみましょう。

df = pd.read_csv("read_csv_example_no_header.csv", names=["Apple", "Banana", "Carrot"]) print(df) # Apple Banana Carrot # 0 1 20 2 # 1 2 30 3 # 2 3 10 1

ヘッダー行がある場合には、headerを指定後、labelで上書きします。

# a,b,c # 1,20,2 # 2,30,3 # 3,10,1

headerでヘッダーの行番号を指定、namseでlabel名を上書きしてみます。

df = pd.read_csv("read_csv_example.csv", header = 0, names=["Apple", "Banana", "Carrot"]) print(df) # Apple Banana Carrot # 0 1 20 2 # 1 2 30 3 # 2 3 10 1

ヘッダー行の指定を忘れると、csvファイルのヘッダーが不要なデータとして含まれてしまいます。

df = pd.read_csv("read_csv_example.csv", names=["Apple", "Banana", "Carrot"]) print(df) # Apple Banana Carrot # 0 a b c ←CSVのもともとのヘッダーがデータとして読まれてしまった # 1 1 20 2 # 2 2 30 3 # 3 3 10 1

headerの指定を忘れないように注意しましょう!

▲目次へ戻る index_col:インデックス列の指定

デフォルトでは、インデックスには連番が振られます。

index_colを指定すると、指定した列をもとにindex名が振られます。

index_colは

列の番号 列のラベル名

のいずれかで指定します。

次のデータを例に、index_colを指定してみます。

# Place,a,b,c # Tokyo,1,20,2 # Osaka,2,30,3 # Chiba,3,10,1

"Place"の列をインデックスに指定してみましょう。

# 列番号で指定 df = pd.read_csv("read_csv_example_index.csv", index_col=0) print(df) # a b c # Place # Tokyo 1 20 2 # Osaka 2 30 3 # Chiba 3 10 1 # ラベル名で指定 df = pd.read_csv("read_csv_example_index.csv", index_col="Place") print(df) # a b c # Place # Tokyo 1 20 2 # Osaka 2 30 3 # Chiba 3 10 1

列の番号、ラベル名どちらを使用しても、"Place"の列をインデックスに指定できました。

▲目次へ戻る 読み込む行・列の指定

csvに不要なデータが含まれている場合には、

行をスキップ:skiprows, skip_footer 読み込む列を指定:usecols コメント行のスキップ:comment

することで、必要なデータのみを読み込むことができます。

▲目次へ戻る skiprows:読み飛ばす行を指定

渡す引数によって、行の飛ばし方が異なります。

skiprows = int:上部からint行分読み飛ばす skiprows = [n, m, l, …]:リストで指定した番号の行を読み飛ばす

以下のデータで、それぞれの実行例を確認していきます。

# a,b,c # 1,20,2 # 2,30,3 # 3,10,1 # 4,50,2 # 5,40,1

まず、skiprows = intで、データ上部からint行分読み飛ばしてみます。

df = pd.read_csv("read_csv_example_skip.csv", skiprows=3, header=None) print(df) # 0 1 2 # 0 3 10 1 # 1 4 50 2 # 2 5 40 1

この例では、始めの3行を読み飛ばしています。

ヘッダー行も読み飛ばされてしまうため、header=Noneを指定しました。

このように、ヘッダー行も読み飛ばされてしまう可能性がある点に注意しましょう。

次にskiprows = [n, m, l, …]で、指定した複数の行を読み飛ばしてみます。

df = pd.read_csv("read_csv_example_skip.csv", skiprows=[1,3]) print(df) # a b c # 0 2 30 3 # 1 4 50 2 # 2 5 40 1

1行目と3行目を読み飛ばしていますね。

このようにskiprowsはintを与えるかリストを与えるかで挙動が異なるので注意しましょう!

▲目次へ戻る skipfooter:下から数行を読み飛ばす

intを指定して、データ下部から読み飛ばす行数を指定できます。

以下のデータで、実行例を確認してみます。

# a,b,c # 1,20,2 # 2,30,3 # 3,10,1 # 4,50,2 # 5,40,1

下から2行分を読み飛ばしてみましょう。

df = pd.read_csv("read_csv_example_skip.csv", skipfooter=2) print(df) # a b c # 0 2 30 3 # 1 4 50 2 # 2 5 40 1

下から2行分を読み飛ばすことができました。

▲目次へ戻る usecols:読み込む列を指定

列番号のリストや、列名を与えて読み込む列を指定することができます。

usecol = [n, m,…] ⇒ 読み込む列番号をintで指定 usecol = ["label_1, label_2,…"] ⇒ 読み込む列名を文字列で指定 # a,b,c,d # 1,20,2,100 # 2,30,3,200 # 3,10,1,300

列番号、列名を指定する方法で、「a」と「c」の行のみを読み込んでみます。

# usecol = [n, m,…]:列番号をintで指定 df = pd.read_csv("read_csv_example.csv", usecols=[0, 2]) print(df) # a c # 0 1 2 # 1 2 3 # 2 3 1 # usecol = [label_1", "label_2",…] : 列名を文字列で指定 df = pd.read_csv("read_csv_example.csv", usecols=["a", "c"]) print(df) # a c # 0 1 2 # 1 2 3 # 2 3 1

列名、列番号をそれぞれ指定して、読み込む列を指定することができました。

ここで注意したいのが、

skiprows:読み飛ばす行を指定 usecols:読み込む列を指定

という点に注意しましょう。

▲目次へ戻る comment:コメント行をスキップ

csv内に特定の文字から始まるコメント行がある場合には、commentを指定することで読み飛ばすことができます。

例えば、「*」から始まるコメント行があるcsvを考えてみます。

a,b,c 1,20,2 2,30,3 *comment line 3,10,1 *comment line2

この例の場合、comment="*"とすると、「*」から始まる行を読み飛ばすことができます。

df = pd.read_csv("read_csv_example.csv", comment="*") print(df) # a b c # 0 1 20 2 # 1 2 30 3 # 2 3 10 1

「*」から始まるコメント行を読み飛ばせました。

▲目次へ戻る おわりに

pandasで、csvファイルを読み込む関数read_csv()を解説しました。

read_csv()は引数で読み込みの細かい設定が可能: sep, delimiter:区切り文字の指定 haeder, index_col:ヘッダー行やインデックス列の指定 skiprows, skipfooter, usecols:読み込む行・列の指定 comment:コメント行のスキップ

csvファイルではなく、excelファイルを読み込みたい場合は、read_excel()を使用します。

こちらの記事を参照してください。

pandas | read_excel() 図解で細かな設定解説!

関数の使い方・使い分けは、手を動かしながら演習すると自然と身につきます!

実務でデータを取り扱っている方はそれを使用しながら、そうでない方はデータ分析の参考書を使用しながら勉強されるのがおススメです。

私の場合は、両方で勉強していましたが、参考書としては特に次のものがおススメでした。

Python実践データ分析100本ノック

Python実践データ分析100本ノック

作者:下山輝昌,松田雄馬,三木孝行 発売日: 2019/10/31 メディア: Kindle版  

【追記】この本のレビューも書いてみました↓↓!

【レビュー】Python実践データ分析100本ノック|100本終えたらpandasが好きになっていた

Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。

気楽にツイートしているので、気軽にフォローしてください!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3